import axios from "axios"
// 创建一个axios实例化对象instance
let instance = axios.create({
    // 基础路径
    baseURL: "https://lianghj.top:8888/api/private/v1/",
    // 过多长时间没有响应就超时
    timeout: 3000
})

// 请求拦截器
instance.interceptors.request.use(
    config => {
        // 每次发送请求前判断是否存在token
        // 如果存在则统一在http请求的header都加上token
        // 这样后台根据token判断登陆情况，此处token一般是用户登录完成后存储到localstorage里的
        // 如果第一个表达式为真，则返回表达式2的值，如果第一个表达式为假，则返回表达式1的值
        localStorage.token && (config.headers.Authorization = localStorage.token)
        return config;
    },
    error => {
        return Promise.error(error)
    })

// 响应拦截器
instance.interceptors.response.use(response => {
    return response
}, error => {
    return error
})

// 参数methods默认值是get，path表示具体路径，post需要给data传参默认值是空对象，get请求需要给params传参默认是空对象
// export const httpServe = (path, params = {}, method = "get", data = {}) => {
//     return new Promise((resolve, reject) => {
//         instance({
//             url: path,
//             params,
//             method,
//             data,
//         }).then(res => {
//             resolve(res)
//         }).catch(err => {
//             reject(err)
//         })
//     })
// }
// 这种调用的写法，必须按照顺序，而且不需要传的参数会自动显示给默认值
// httpServe('users',{name:'zhangsan'})  get请求，不需要传参，因为参数默认是get
// post请求的调用方法
// httpServe('login', {}, 'post', { username: 'admin', password: "123456" })


// 使用对象解构的方式来传参，
// 目的，可以不用按照顺序进行传参，参数会通过key名找到对应的值
export const httpServe = ({path='', params = {}, method = "get", data = {}}={}) => {
    return new Promise((resolve, reject) => {
        instance({
            url: path,
            params,
            method,
            data,
        }).then(res => {
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}
// get请求
// httpServe({ path:'users',params={name:'zhangsan'} })
// post请求
// httpServe({method:'post',data:{username:admin,password:123456},path:'login' })